/* Copyright 2021 Cutie Club
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include QMK_KEYBOARD_H

enum custom_keycodes {
    NUM_0 = 0,
    NUM_1,
    NUM_2,
    NUM_3,
    NUM_4,
    NUM_5,
    NUM_6,
    NUM_7,
    NUM_8,
    NUM_9,
    NUM_10,
    NUM_11,
    NUM_12,
    NUM_13,
    NUM_14,
    NUM_15,
    NUM_16,
    NUM_17,
    NUM_18,
    NUM_19,
    NUM_20,
    NUM_21,
    NUM_22,
    NUM_23,
    NUM_24,
    NUM_25,
    NUM_26,
    NUM_27,
    NUM_28,
    NUM_29,
    NUM_30,
    NUM_31,
    NUM_32,
    NUM_33,
    NUM_34,
    NUM_35,
    NUM_36,
    NUM_37,
    NUM_38,
    NUM_39,
    NUM_40,
    NUM_41,
    NUM_42,
    NUM_43,
    NUM_44,
    NUM_45,
    NUM_46,
    NUM_47,
    NUM_48,
    NUM_49,
    NUM_50,
    NUM_51,
    NUM_52,
    NUM_53,
    NUM_54,
    NUM_55,
    NUM_56,
    NUM_57,
    NUM_58,
    NUM_59,
    NUM_60,
    NUM_61,
    NUM_62,
    NUM_63,
    NUM_64,
    NUM_65,
    NUM_66,
    NUM_67,
    NUM_68,
    NUM_69,
    NUM_70,
    NUM_71,
    NUM_72,
    NUM_73,
    NUM_74,
    NUM_75,
    NUM_76,
    NUM_77,
    NUM_78,
    NUM_79,
    NUM_80,
    NUM_81,
    NUM_82,
    NUM_83,
    NUM_84,
    NUM_85,
    NUM_86,
    NUM_87,
    NUM_88,
    NUM_89,
    NUM_90,
    NUM_91,
    NUM_92,
    NUM_93,
    NUM_94,
    NUM_95,
    NUM_96,
    NUM_97,
    NUM_98,
    NUM_99,
    NUM_100,
    NUM_101,
    NUM_102,
    NUM_103,
    NUM_104,
    NUM_105,
    NUM_106,
    NUM_107,
    NUM_108,
    NUM_109,
    NUM_110,
    NUM_111,
    NUM_112,
    NUM_113,
    NUM_114,
    NUM_115,
    NUM_116,
    NUM_117,
    NUM_118,
    NUM_119,
    NUM_120,
    NUM_121,
    NUM_122,
    NUM_123,
    NUM_124,
    NUM_125,
    NUM_126,
    NUM_127,
    NUM_128,
    NUM_129,
    NUM_130,
    NUM_131,
    NUM_132,
    NUM_133,
    NUM_134,
    NUM_135,
    NUM_136,
    NUM_137,
    NUM_138,
    NUM_139,
    NUM_140,
    NUM_141,
    NUM_142,
    NUM_143,
    NUM_144,
    NUM_145,
    NUM_146,
    NUM_147,
    NUM_148,
    NUM_149,
    NUM_150,
    NUM_151,
    NUM_152,
    NUM_153,
    NUM_154,
    NUM_155,
    NUM_156,
    NUM_157,
    NUM_158,
    NUM_159,
    NUM_160,
    NUM_161,
    NUM_162,
    NUM_163,
    NUM_164,
    NUM_165,
    NUM_166,
    NUM_167,
    NUM_168,
    NUM_169,
    NUM_170,
    NUM_171,
    NUM_172,
    NUM_173,
    NUM_174,
    NUM_175,
    NUM_176,
    NUM_177,
    NUM_178,
    NUM_179,
    NUM_180,
    NUM_181,
    NUM_182,
    NUM_183,
    NUM_184,
    NUM_185,
    NUM_186,
    NUM_187,
    NUM_188,
    NUM_189,
    NUM_190,
    NUM_191,
    NUM_192,
    NUM_193,
    NUM_194,
    NUM_195,
    NUM_196,
    NUM_197,
    NUM_198,
    NUM_199,
    NUM_200,
    NUM_201,
    NUM_202,
    NUM_203,
    NUM_204,
    NUM_205,
    NUM_206,
    NUM_207,
    NUM_208,
    NUM_209,
    NUM_210,
    NUM_211,
    NUM_212,
    NUM_213,
    NUM_214,
    NUM_215,
    NUM_216,
    NUM_217,
    NUM_218,
    NUM_219,
    NUM_220,
    NUM_221,
    NUM_222,
    NUM_223,
    NUM_224,
    NUM_225,
    NUM_226,
    NUM_227,
    NUM_228,
    NUM_229,
    NUM_230,
    NUM_231,
    NUM_232,
    NUM_233,
    NUM_234,
    NUM_235,
    NUM_236,
    NUM_237,
    NUM_238,
    NUM_239,
    NUM_240,
    NUM_241,
    NUM_242,
    NUM_243,
    NUM_244,
    NUM_245,
    NUM_246,
    NUM_247,
    NUM_248,
    NUM_249,
    NUM_250,
    NUM_251,
    NUM_252,
    NUM_253,
    NUM_254,
    NUM_255,
    NUM_256,
    NUM_257,
    NUM_258,
    NUM_259,
    NUM_260,
    NUM_261,
    NUM_262,
    NUM_263,
    NUM_264,
    NUM_265,
    NUM_266,
    NUM_267,
    NUM_268,
    NUM_269,
    NUM_270,
    NUM_271,
    NUM_272,
    NUM_273,
    NUM_274,
    NUM_275,
    NUM_276,
    NUM_277,
    NUM_278,
    NUM_279,
    NUM_280,
    NUM_281,
    NUM_282,
    NUM_283,
    NUM_284,
    NUM_285,
    NUM_286,
    NUM_287,
    NUM_288,
    NUM_289,
    NUM_290,
    NUM_291,
    NUM_292,
    NUM_293,
    NUM_294,
    NUM_295,
    NUM_296,
    NUM_297,
    NUM_298,
    NUM_299,
    NUM_300,
    NUM_301,
    NUM_302,
    NUM_303,
    NUM_304,
    NUM_305,
    NUM_306,
    NUM_307,
    NUM_308,
    NUM_309,
    NUM_310,
    NUM_311,
    NUM_312,
    NUM_313,
    NUM_314,
    NUM_315,
    NUM_316,
    NUM_317,
    NUM_318,
    NUM_319,
    NUM_320,
    NUM_321,
    NUM_322,
    NUM_323,
    NUM_324,
    NUM_325,
    NUM_326,
    NUM_327,
    NUM_328,
    NUM_329,
    NUM_330,
    NUM_331,
    NUM_332,
    NUM_333,
    NUM_334,
    NUM_335,
    NUM_336,
    NUM_337,
    NUM_338,
    NUM_339,
    NUM_340,
    NUM_341,
    NUM_342,
    NUM_343,
    NUM_344,
    NUM_345,
    NUM_346,
    NUM_347,
    NUM_348,
    NUM_349,
    NUM_350,
    NUM_351,
    NUM_352,
    NUM_353,
    NUM_354,
    NUM_355,
    NUM_356,
    NUM_357,
    NUM_358,
    NUM_359,
    NUM_360,
    NUM_361,
    NUM_362,
    NUM_363,
    NUM_364,
    NUM_365,
    NUM_366,
    NUM_367,
    NUM_368,
    NUM_369,
    NUM_370,
    NUM_371,
    NUM_372,
    NUM_373,
    NUM_374,
    NUM_375,
    NUM_376,
    NUM_377,
    NUM_378,
    NUM_379,
    NUM_380,
    NUM_381,
    NUM_382,
    NUM_383,
    NUM_384,
    NUM_385,
    NUM_386,
    NUM_387,
    NUM_388,
    NUM_389,
    NUM_390,
    NUM_391,
    NUM_392,
    NUM_393,
    NUM_394,
    NUM_395,
    NUM_396,
    NUM_397,
    NUM_398,
    NUM_399,
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    /* Base */
    [0] = LAYOUT_ortho_20x20(
        NUM_0,  NUM_1,  NUM_2,  NUM_3,  NUM_4,  NUM_5,  NUM_6,  NUM_7,  NUM_8,  NUM_9,  NUM_10, NUM_11, NUM_12, NUM_13, NUM_14, NUM_15, NUM_16, NUM_17, NUM_18, NUM_19,
        NUM_20, NUM_21, NUM_22, NUM_23, NUM_24, NUM_25, NUM_26, NUM_27, NUM_28, NUM_29, NUM_30, NUM_31, NUM_32, NUM_33, NUM_34, NUM_35, NUM_36, NUM_37, NUM_38, NUM_39,
        NUM_40, NUM_41, NUM_42, NUM_43, NUM_44, NUM_45, NUM_46, NUM_47, NUM_48, NUM_49, NUM_50, NUM_51, NUM_52, NUM_53, NUM_54, NUM_55, NUM_56, NUM_57, NUM_58, NUM_59,
        NUM_60, NUM_61, NUM_62, NUM_63, NUM_64, NUM_65, NUM_66, NUM_67, NUM_68, NUM_69, NUM_70, NUM_71, NUM_72, NUM_73, NUM_74, NUM_75, NUM_76, NUM_77, NUM_78, NUM_79,
        NUM_80, NUM_81, NUM_82, NUM_83, NUM_84, NUM_85, NUM_86, NUM_87, NUM_88, NUM_89, NUM_90, NUM_91, NUM_92, NUM_93, NUM_94, NUM_95, NUM_96, NUM_97, NUM_98, NUM_99,
        NUM_100,NUM_101,NUM_102,NUM_103,NUM_104,NUM_105,NUM_106,NUM_107,NUM_108,NUM_109,NUM_110,NUM_111,NUM_112,NUM_113,NUM_114,NUM_115,NUM_116,NUM_117,NUM_118,NUM_119,
        NUM_120,NUM_121,NUM_122,NUM_123,NUM_124,NUM_125,NUM_126,NUM_127,NUM_128,NUM_129,NUM_130,NUM_131,NUM_132,NUM_133,NUM_134,NUM_135,NUM_136,NUM_137,NUM_138,NUM_139,
        NUM_140,NUM_141,NUM_142,NUM_143,NUM_144,NUM_145,NUM_146,NUM_147,NUM_148,NUM_149,NUM_150,NUM_151,NUM_152,NUM_153,NUM_154,NUM_155,NUM_156,NUM_157,NUM_158,NUM_159,
        NUM_160,NUM_161,NUM_162,NUM_163,NUM_164,NUM_165,NUM_166,NUM_167,NUM_168,NUM_169,NUM_170,NUM_171,NUM_172,NUM_173,NUM_174,NUM_175,NUM_176,NUM_177,NUM_178,NUM_179,
        NUM_180,NUM_181,NUM_182,NUM_183,NUM_184,NUM_185,NUM_186,NUM_187,NUM_188,NUM_189,NUM_190,NUM_191,NUM_192,NUM_193,NUM_194,NUM_195,NUM_196,NUM_197,NUM_198,NUM_199,
        NUM_200,NUM_201,NUM_202,NUM_203,NUM_204,NUM_205,NUM_206,NUM_207,NUM_208,NUM_209,NUM_210,NUM_211,NUM_212,NUM_213,NUM_214,NUM_215,NUM_216,NUM_217,NUM_218,NUM_219,
        NUM_220,NUM_221,NUM_222,NUM_223,NUM_224,NUM_225,NUM_226,NUM_227,NUM_228,NUM_229,NUM_230,NUM_231,NUM_232,NUM_233,NUM_234,NUM_235,NUM_236,NUM_237,NUM_238,NUM_239,
        NUM_240,NUM_241,NUM_242,NUM_243,NUM_244,NUM_245,NUM_246,NUM_247,NUM_248,NUM_249,NUM_250,NUM_251,NUM_252,NUM_253,NUM_254,NUM_255,NUM_256,NUM_257,NUM_258,NUM_259,
        NUM_260,NUM_261,NUM_262,NUM_263,NUM_264,NUM_265,NUM_266,NUM_267,NUM_268,NUM_269,NUM_270,NUM_271,NUM_272,NUM_273,NUM_274,NUM_275,NUM_276,NUM_277,NUM_278,NUM_279,
        NUM_280,NUM_281,NUM_282,NUM_283,NUM_284,NUM_285,NUM_286,NUM_287,NUM_288,NUM_289,NUM_290,NUM_291,NUM_292,NUM_293,NUM_294,NUM_295,NUM_296,NUM_297,NUM_298,NUM_299,
        NUM_300,NUM_301,NUM_302,NUM_303,NUM_304,NUM_305,NUM_306,NUM_307,NUM_308,NUM_309,NUM_310,NUM_311,NUM_312,NUM_313,NUM_314,NUM_315,NUM_316,NUM_317,NUM_318,NUM_319,
        NUM_320,NUM_321,NUM_322,NUM_323,NUM_324,NUM_325,NUM_326,NUM_327,NUM_328,NUM_329,NUM_330,NUM_331,NUM_332,NUM_333,NUM_334,NUM_335,NUM_336,NUM_337,NUM_338,NUM_339,
        NUM_340,NUM_341,NUM_342,NUM_343,NUM_344,NUM_345,NUM_346,NUM_347,NUM_348,NUM_349,NUM_350,NUM_351,NUM_352,NUM_353,NUM_354,NUM_355,NUM_356,NUM_357,NUM_358,NUM_359,
        NUM_360,NUM_361,NUM_362,NUM_363,NUM_364,NUM_365,NUM_366,NUM_367,NUM_368,NUM_369,NUM_370,NUM_371,NUM_372,NUM_373,NUM_374,NUM_375,NUM_376,NUM_377,NUM_378,NUM_379,
        NUM_380,NUM_381,NUM_382,NUM_383,NUM_384,NUM_385,NUM_386,NUM_387,NUM_388,NUM_389,NUM_390,NUM_391,NUM_392,NUM_393,NUM_394,NUM_395,NUM_396,NUM_397,NUM_398,NUM_399
    )
};

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    char numString[5];
    itoa(keycode, numString, 10);
    SEND_STRING(numString);
    return false;
};
